package de.slothsoft.commons.swing;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.io.Serializable;

public class CenterLayout implements LayoutManager, Serializable {

    private static final long serialVersionUID = 1L;
    private static final Dimension NULL_DIMENSION = new Dimension(0, 0);

    @Override
    public void addLayoutComponent(String name, Component comp) {
	// nothing to do
    }

    @Override
    public void removeLayoutComponent(Component comp) {
	// nothing to do
    }

    @Override
    public Dimension preferredLayoutSize(Container container) {
	if (container.getComponentCount() > 0) {
	    Component c = container.getComponent(0);
	    if (c != null) {
		Dimension size = c.getPreferredSize();
		Insets insets = container.getInsets();

		return new Dimension(size.width + insets.left + insets.right, size.height + insets.top + insets.bottom);
	    }
	}
	return NULL_DIMENSION;
    }

    @Override
    public Dimension minimumLayoutSize(Container cont) {
	return preferredLayoutSize(cont);
    }

    @Override
    public void layoutContainer(Container container) {
	if (container.getComponentCount() > 0) {
	    Component c = container.getComponent(0);
	    Dimension pref = c.getPreferredSize();
	    int containerWidth = container.getWidth();
	    int containerHeight = container.getHeight();
	    Insets containerInsets = container.getInsets();

	    containerWidth -= containerInsets.left + containerInsets.right;
	    containerHeight -= containerInsets.top + containerInsets.bottom;

	    int left = (containerWidth - pref.width) / 2 + containerInsets.left;
	    int right = (containerHeight - pref.height) / 2 + containerInsets.top;

	    c.setBounds(left, right, pref.width, pref.height);
	}
    }
}